Плагин CHMDir для Total Commander Версия 0.40 beta 5. Тестировался с TC 6.51 под w2k rus. -- Хотелось бы, чтобы программа была полезной, однако, НИКАКИХ ГАРАНТИЙ, ПОДДЕРЖКИ и всё такое... CHMlib, CHMtools и библиотека LZX Compression Copyright 2001 Matthew T. Russotto. -- CHMDir позволяет TC распаковывать, искать, упаковывать и удалять файлы в CHM-файлах (компилированный HTML), а также распаковывать файлы HtmlHelp 2 (Hx?) Наличие Internet Explorer`а в системе не требуется. NB: Плагин не может создавать полноценные CHM-ы с содержанием, индексом и т.д., но его достаточно для того, чтобы сделать CHM из скачанного сайта, если среди упаковываемых файлов есть хотя бы один файл с расширением .htm или .html. Для примера можно перепаковать этот архив в CHM. Для создания полноценного файла справки HtmlHelp можно использовать HTML Help Workshop или htm2chm. Если файлы пакуются в новый архив, и в корне будущего архива нет файла '#SYSTEM', то он будет создан. В качестве главной страницы будет взят первый встретившийся файл из 'default_topics', а, если такового нет, то первый встретившийся файл с расширением '.htm' или '.html'. Если в списке на добавление нет файла содержания (.hhc), то он тоже будет создан с именем 'stub.hhc'. В этом файле будут перечислены все .htm*, .php-файлы с подкаталогами в том порядке, в каком они перечислены в списке на добавление. Т.е. их порядок с содержании зависит от сортировки, принятой в TC. Для сохранения структуры файла перед перепаковкой он должен быть распакован с включенной опцией 'Показывать файлы CHM', чтобы сохранить файлы типа '#SYSTEM' (в нем указана такая информация как заголовок окна справки, имя файла содержания и проч.). -- Установка плагина (только 32 бит): 1. Распаковать файл в каталог по желанию. 2. В TC: Настройка...->Архиваторы->Дополнительные архиваторы-> Настройка DLL-модулей ввести новое расширение 'chm'. 3. Нажать кнопку 'Другая...', выбрать файл плагина и нажать 'Открыть'. 4. Повторить шаги 2-3 для расширения .hxs. 5. Нажать OK. 6. При необходимости создать в каталоге с плагином файл CHMDir.ini (см. ниже). NB: Иконка файлов и действие по умолчанию (по нажатию ) не изменятся. Для входа в архив нужно использовать сочетание . При желании входить в архив при помощи клавиши и показывать у файла иконку архива нужно сделать следующее: 1. В главном меню выбрать 'Конфигурация/Настройка...' и открыть страницу 'Архиваторы', в которой нажать кнопку 'Настройка архиваторных плагинов' 2. В выпадающем списке 'Файлы с расширением' выбрать 'chm' 3. В поле 'Открывать с помощью программы:' заменить число NNN перед запятой на MMM, где MMM=NNN-256. или 1. Закрыть Total Commander. 2. Открыть INI-файл Total Commander`а (обычно <каталог_windows>\WINCMD.INI) в текстовом редакторе. 3. В секции [PackerPlugins] изменить NNN в строке, похожей на 'chm=NNN,C:\wincmd\chmdir.wcx' на MMM, где MMM=NNN-256. Для просмотра CHM-файла можно использовать: - команду 'hh '; - сочетание для вставки имени файла в командную строку, а затем для запуска ассоциированой программы (hh.exe); - правый клик на имени файла и действие по умолчанию (выделено полужирным шрифтом). -- Файл CHMDir.ini: В одном каталоге с плагином может располагаться файл CHMDir.ini примерно такого содержания (приведены значения по умолчанию): [CHMDir] show_spec_files=0 show_stor_files=0 use_file_attrib=0 arc_cache_count=0 calc_chunk_size=0 default_topics=index.htm;index.html;contents.htm;contents.html;readme.htm;readme.html; dir_chunk_size=4096 its_store_ext=gif;jpg;png;zip;rar;swf its_use_store=0 lzx_wsize_code=1 sort_dir_by_ext=0 low_priority=0 title_stub=No Title Languages=English,Russian Language=English [CHMDir.English] LangName=English 101=CHMDir plugin settings 1000=Unpacker 1001=&Show special CHM files ... show_spec_files -- показывать (1) в списке специальные файлы HtmlHelp (вроде #STRINGS, которые начинаются на # или $) или нет (0). show_stor_files -- показывать (1) в списке специальные файлы, относящиеся к формату IStorage или нет (0). NB: это файлы которые содержат сжатые файлы (которые и так показаны в файловой панели) и информацию о сжатии -- полезного в них мало. use_file_attrib -- использовать (1) или нет (0) атрибуты для специальных файлов, перечисленных выше. Специальные файлы CHM -- скрытые, IStorage -- системные. arc_cache_count -- количество файлов, у которых будут кэшироваться данные. NB: Для кэширования одного файла необходимо порядка полумегабайта памяти. calc_chunk_size -- если не равен нулю, то перед записью листинга будет проверено, уместится ли он в 32 кбайта, и, если да, то будет записан единственный чанк. Иначе будет использован размер из 'dir_chunk_size'. Это позволит уменьшить размер архива, особенно при малом количестве файлов. default_topics -- имена файлов, которые можно сделать главной страницей в CHM-е. Главной страницей будет первый встретившийся в этом списке. dir_chunk_size (4096) -- размер чанков (кусочков) листинга файлов. its_store_ext -- расширения файлов, которые не нужно сжимать в виде 'gif;jpg' (без точки, разделенные точкой с запятой). Будет использоваться, если its_use_store=1. Возможно применение подстановочных символов (* и ?). its_use_store -- сохранять, не сжимая (1), или сжимать (0) файлы с раширениями из списка its_store_ext. lzx_wsize_code (1) -- размер окна LZX (0-6 включительно): 0 - 32k, 2 - 64k, ... 6 - 2M байт. Больше размер окна --> лучше сжатие, но меньше скорость (в геометрической прогрессии). sort_dir_by_ext -- сортировать (выше степень сжатия) (1) или нет (0) файлы по расширению перед упаковкой. low_priority -- устанавливать (1) или нет (0) приоритет в THREAD_PRIORITY_LOWEST на время упаковки. title_stub -- заголовок топика, который не имеет тега в секции <HEAD>. Languages -- список доступных языков в этом файле для диалога настройки. Language -- текущий язык. [CHMDir.Lang] -- секция перевода на язык 'Lang'. LangName -- название языка на этом языке. ### -- ID управляющего элемента диалога. Чтобы изменения вступили в силу, нужно либо перезапустить TC, либо выгрузить все плагины и зайти в другой CHM (TC помнит каталог последнего архива). -- Известные ошибки и ограничения: 1. Плагин использует для распаковки CHMTools, которые работают только с версией 3 CHM. (Правда, я других и не встречал пока). 2. Плагин использует оперативную память для хранения списка файлов в CHM. Поэтому, если имеется CHM, в котором упакованы 1000 файлов со средней длиной имени 100 байт, то для распаковки нужно иметь порядка 0,5 Мб доступной оперативной памяти. 3. Плагин на разрабатывался и не будет работать с файлами >= 2 Гб. -- CHMView.exe: Программа предназначена для просмотра CHM-файлов без участия hh.exe. В качестве параметра ей нужно передать имя файла CHM. CHMView распакует этот файл во временный каталог и попытается запустить зарегистрированный просмотрщик HTML. -- Свежие версии см.: http://wincmd.ru/plugring/chmdir.html -- Версии: 0.40 beta 5: Добавлена распаковка файлов .HxS. Расширен stub.hhc. Добавлен параметр INI-файла title_stub. 0.40 beta 4: Исправлена досадная ошибка в заголовке файла (размер структуры), которая прокралась в код по недосмотру. Спасибо BootROM`му за содействие. Добавлена возможность установки низкого приоритета на время упаковки. 0.40 beta 3: CHMView не распаковывал CHM-ы с каталогами, в которых находятся только подкаталоги. Щелчок на кнопке 'Не сжимать расш.' разрешает или запрещает следующее поле ввода. "=.gif" теперь распаковывается как "=.gif", а не как "_.gif". Подправлена сортировка файлов в листинге CHM-а. 0.40 beta 2: Переписан код записи листинга. В INI-файл добавлены параметры упаковки. Добавлена сортировка файлов по расширению до упаковки и вычисление размера чанка листинга. Добавлена генерация информации HtmlHelp. Добавлены параметры INI-файла: calc_chunk_size, its_use_store, default_topics, sort_dir_by_ext. Добавлен диалог настройки. Добавлен index.htm 0.40 beta: Код чтения листинга и распаковки полностью переписан -- значительно уменьшена потребность в оперативной памяти (особенно для CHM, в которых есть большие файлы), немного увеличилась производительность. Добавлено кэширование данных CHM-ов. Добавлены функции PackFiles(), DeleteFiles() и ConfigurePacker(). Изменены свойства плагина. GetPackerCaps() теперь возвращает 479. Если плагин раньше использовался, его нужно переконфигурировать (см. выше). 0.30a: Добавлена функция PackSetDefaultParams() (пока только заглушка и только в качестве комментария -- плугин инициализируется во время загрузки при вызове DllMain() -- это, конечно, неправильно, но пользователь не знает, какой INI-файл используется, а плугин не может ему этого сообщить: все настройки делаются вручную правкой INI-файла). 0.30: Добавлена функция CanYouHandleThisFile() для открытия файлов с расширением не .chm. GetPackerCaps() теперь возвращает 452. Если плагин раньше использовался, нужно: 1. Закрыть Total Commander 2. Открыть в текстовом редакторе файл WINCMD.INI 3. Найти секцию [PackerPlugins] 4. В строке похожей на chm=388,C:\wincmd\chmdir.wcx заменить 388 на 452 5. Запустить Total Commander В дистрибутив вновь добавлен CHMView.exe. 0.29 beta: Добавлен INI-файл. Значительно уменьшена потребность в оперативной памяти. Убраны make-файлы для Watcom и lcc-Win32. 0.28 beta: Не показываются в списке файлы, чьи имена начинаются с '#' и '$'. Символ '_' используется для замены символов, которые не могут быть отображены в текущей кодовой странице при использовании функции WideCharToMultiByte(). Не тестировалось по причине отсутствия таких файлов. Ещё один клюдж для распаковки файлов, созданных htm2chm. 0.27 beta: Добавлена обработка результата, возвращаемого ProcessDataProc -- работает кнопка отмены. Исправлена ошибка, вызывавшая сбой при открытии CHM-ов, содержащих дли-и-инные имена файлов. 0.26 beta: Добавлено декодирование имён файлов из UTF-8. 0.24 beta: Добавлена информация о CHMView. Время последнего изменения файлов в архиве == времени CHM-файла. Добавлена информация о версии. 0.23 beta: 1. Возврат к одному файлу без дополнительной DLL. 2. Исправлена ошибка с освобождением памяти в chmdir. 3. ЗАЛАТАНА (надеюсь) -- не исправлена -- [ошибка] в chmlib Matthew T. Russotto, которая вызвала нарушение при обращении к памяти. См. комментарий со словами "!!! Hobo". 4. Добавлен файл READMEru.txt -- на русском языке. 5. Название архива изменено на wcx_chmdirX.XX.zip. Где X.XX -- номер версии. 0.22 beta: Очередная попытка сделать работу плагина стабильной. Ничего не получилось. :-( chmlib Matthew T. Russotto перенесена в отделную DLL, которая загружаетс и выгружается при каждом открытии архива -- может это немного сэкономит память. 0.21 beta: Добавлена функция GetPackerCaps(). 0.20 beta: Первый выход в свет. -- Компиляция: Отредактировать Makefile, создать каталог "obj" и запустить соответствующий 'make.exe'. -- Автор: Олег Бондарь aka Hobo (hobo-mts@mail.ru).